package singleton;

/**
 * @Author 孔德成
 * @Slogan 致敬大师，致敬未来的你
 * @desc 单例模式：保证该类在内存中只有一个实例
 * <p>
 * 懒汉式4
 * 双重检查
 */
public class Demo6 {
    // volatile 解决指令重排问题
    private static volatile Demo6 INSTANCE;

    private Demo6() {
    }

    // synchronized 锁的是 Demo5.class 对象
    public static Demo6 getInstance() {

        if (INSTANCE == null) {
            synchronized (Demo6.class) {
                // 双重检查
                if (INSTANCE == null) {
                    // 模拟线程不安全场景
                    try {
                        Thread.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    INSTANCE = new Demo6();
                }
            }
        }
        return INSTANCE;
    }

    public void work() {
        System.out.println("致敬大师，致敬未来的你");
    }
}
